package servlet;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import bdelegate.BdelegateWeb;
import beans.AperturaMesaBean;
import beans.CartaBean;
import beans.ItemCartaBean;
import beans.MesaBean;
import beans.MozoBean;
import beans.PedidoBean;
import beans.SalonBean;
import beans.SectorBean;
import beans.SucursalBean;

public class MetodosServlets {
	
	private static MetodosServlets instancia = null;
	
	public static MetodosServlets getInstancia() {
		if(instancia == null) {
			instancia = new MetodosServlets();
		}
		return instancia;
	}
	
	/**
	 * Metodo que obtiene datos de un mozo de la sucursal
	 */
	public MozoBean buscarMozo(Integer mozoId, SucursalBean suc)
	{
		MozoBean mozo = new MozoBean();
		
		SalonBean salonSuc = suc.getSalon();
		List<SectorBean> sectoresSuc = salonSuc.getSectores();
		
		for (SectorBean sector : sectoresSuc) {
			List<MozoBean> mozosSector = sector.getMozos();
			for (MozoBean mozoSector : mozosSector) {
				if(mozoSector.getLegajo().equals(mozoId)) {
					mozo = mozoSector;
				}
			}
		}
		
		return mozo;
	}
	/**
	 * 
	 * @param suc
	 * @param idSector
	 * @return
	 */
	public List<MesaBean> buscarMesasPorSector(SucursalBean suc, Integer idSector)
	{
		List<MesaBean> mesasSector = new ArrayList<MesaBean>();
		
		SalonBean salon = suc.getSalon();
		List<SectorBean> sectores = salon.getSectores();
		
		for (SectorBean sector : sectores) {
			if(sector.getIdSector().equals(idSector)) {
				mesasSector = sector.getMesas();
			}
		}
		
		return mesasSector;
	}
	/**
	 * 
	 * @param suc
	 * @param idSector
	 * @return
	 */
	public Integer obtenerPrimerIdMesas(SucursalBean suc, Integer idSector)
	{
		//Integer id = 0;
		List<MesaBean> mesasSector = this.buscarMesasPorSector(suc, idSector);
		
		Integer menor = 1000; //numero muy grande
		
		for (MesaBean mesa : mesasSector) {
			if(mesa.getIdMesa() < menor) {
				menor = mesa.getIdMesa();
			}
		}
		return menor;
	}
	
	/**
	 * Metodo que obtiene los datos de las mesas seleccionadas.
	 */
	public List<MesaBean> buscarMesasSeleccionadas(Integer[] mesasId, Integer sectorId, SucursalBean suc)
	{
		List<MesaBean> listaMesas = this.buscarMesasPorSector(suc, sectorId);
		List<MesaBean> seleccionadas = new ArrayList<MesaBean>();
		
		for (MesaBean mesaSector : listaMesas) {
			//chequeo si el id de mesa existe en el array de mesas seleccionadas.
			if(Arrays.asList(mesasId).contains(mesaSector.getIdMesa())) {
				seleccionadas.add(mesaSector);
			}
		}
		
		return seleccionadas;
	}
	
	public List<MozoBean> buscarMozosPorSector(SucursalBean suc, Integer idSector)
	{
		List<MozoBean> mozos = new ArrayList<MozoBean>();
		List<SectorBean> sectores = suc.getSalon().getSectores();
		
		//busco el sector que coincida con el idSector obtenido
		for (SectorBean sector : sectores) {
			if(sector.getIdSector().equals(idSector)) {
				mozos = sector.getMozos();
			}
		}
		
		return mozos;
	}
	
	/**
	 * 
	 * @param suc
	 * @return
	 */
	public List<MozoBean> buscarMozosPorSucursal(SucursalBean suc)
	{
		List<MozoBean> mozos = new ArrayList<MozoBean>();
		List<SectorBean> sectores = suc.getSalon().getSectores();
		
		//busco el sector que coincida con el idSector obtenido
		for (SectorBean sector : sectores) {
			List<MozoBean> mozosSector = sector.getMozos();
			
			for (MozoBean mozoSector : mozosSector) {
				mozos.add(mozoSector);
			}
		}
		
		return mozos;
	}
	
	/**
	 * 		
	 * @param estado
	 * @return
	 */
	public String obtenerClaseEstado(String estado)
	{
		String output = "";
		if (estado.equals("LIBRE")){
			output = "class='btn btn-xs btn-success' ";
		} else if (estado.equals("ALIBERAR")) {
			output = output + "class='btn btn-xs btn-warning disabled' ";
		} else if (estado.equals("OCUPADA")) {
			output = output + "class='btn btn-xs btn-danger disabled' ";
		}
		return output;
	}
	
	/**
	 * 
	 * @param suc
	 * @param idMozo
	 * @return
	 */
	public List<AperturaMesaBean> buscarAperturasMesaPorMozo(SucursalBean suc, Integer idMozo)
	{
		List<AperturaMesaBean> apMesasMozo = new ArrayList<AperturaMesaBean>();
		List<AperturaMesaBean> listaApMesa = suc.getAperturaMesa();
		//MozoBean mozo = this.buscarMozo(idMozo, suc);
		
		for (AperturaMesaBean aperturaMesa : listaApMesa) {
			if((aperturaMesa.getEstado().equals("ACTIVA")) && 
			   (aperturaMesa.getMozo().getLegajo().equals(idMozo))) {
				apMesasMozo.add(aperturaMesa);
			}
		}
		
		return apMesasMozo;
	}
	
	/**
	 * 
	 * @param suc
	 * @param idMozo
	 * @return
	 */
	public List<AperturaMesaBean> buscarAperturasMesaPorMozoACerrar(SucursalBean suc, Integer idMozo)
	{
		List<AperturaMesaBean> apMesasMozo = new ArrayList<AperturaMesaBean>();
		List<AperturaMesaBean> listaApMesa = suc.getAperturaMesa();
		//MozoBean mozo = this.buscarMozo(idMozo, suc);
		
		for (AperturaMesaBean aperturaMesa : listaApMesa) {
			if((aperturaMesa.getEstado().equals("ACERRAR")) && 
			   (aperturaMesa.getMozo().getLegajo().equals(idMozo))) {
				apMesasMozo.add(aperturaMesa);
			}
		}
		
		return apMesasMozo;
	}
	
	/**
	 * 
	 * @param suc
	 * @return
	 */
	public List<ItemCartaBean> obtenerItemsCarta(SucursalBean suc)
	{
		List<ItemCartaBean> itemsCarta = new ArrayList<ItemCartaBean>();
		itemsCarta = suc.getCarta().getItems();
		return itemsCarta;
	}
	
	/**
	 * 
	 * @param suc
	 * @return
	 */
	public String obtenerComboItemsCarta(SucursalBean suc, Integer areaId)
	{
		String output = "<select id='itemCartaId' class='form-control'>" +
					    "<option value=''>Seleccione</option>";
		
		List<ItemCartaBean> itemsCarta = MetodosServlets.getInstancia().obtenerItemsCarta(suc);
   	 	for (ItemCartaBean itemCarta : itemsCarta) {
			System.out.println("Metodos servlet: linea 210: id Area: " + itemCarta.getPlato().getArea().getId());
			System.out.println("Metodos servlet: linea 211: id Area que compara : " + areaId);
   	 		if(itemCarta.getPlato().getArea().getId().equals(areaId)){
   	 			output = output + "<option value='"+itemCarta.getId()+"'>"+itemCarta.getPlato().getDescripcion()+"</option>";
   	 		}
		}

   	 	output = output + "</select>";
   	 	return output;
	}
	
	/**
	 * 
	 * @param idSucursal
	 * @param mesas
	 * @return
	 */
	public String mapearMesas( List<MesaBean> mesas)
	{
		MesaBean[] mesaArray = new MesaBean[40];
		
		//paso a array
		for (MesaBean mesa : mesas){
//			System.out.println("Nro mesa"+mesa.getIdMesa());
			mesaArray[mesa.getIdMesa()] = mesa;
		}
		
		String output = "<div class='form-group'>"+
						"<div class='row'>";
		
		//Armo el mapa de mesas			
		output = output + "<div id='sector_1_1' class='col-lg-4'>";
		output = output + "<button id='1_1' name='1_1' ";
		output = output + this.obtenerClaseEstado(mesaArray[1].getEstado());
		output = output + "type='button' onclick='selecMesa(1,1);' value='1'>01</button>";
		
		output = output + "<button id='1_2' name='1_2' ";
		output = output + this.obtenerClaseEstado(mesaArray[2].getEstado());
		output = output + "type='button' onclick='selecMesa(1,2);' value='2'>02</button>";
 
		output = output + "<button id='1_3' name='1_3' ";
		output = output + this.obtenerClaseEstado(mesaArray[3].getEstado());
		output = output + "type='button' onclick='selecMesa(1,3);' value='3'>03</button>";

		output = output + "<button id='1_4' name='1_4' ";
		output = output + this.obtenerClaseEstado(mesaArray[4].getEstado());
		output = output + "type='button' onclick='selecMesa(1,4);' value='4'>04</button>";
		output = output + "</div>";
				
		output = output + "<div id='sector_2_1' class='col-lg-4'>";
		output = output + "<button id='2_19' name='2_19' ";
		output = output + this.obtenerClaseEstado(mesaArray[19].getEstado());
		output = output + "type='button' onclick='selecMesa(2,19);' value='19'>19</button>";
		
		output = output + "<button id='2_20' name='2_20' ";
		output = output + this.obtenerClaseEstado(mesaArray[20].getEstado());
		output = output + "type='button' onclick='selecMesa(2,20);' value='20'>20</button>";
		output = output + "</div>";
		
		output = output + "<div id='sector_3_1' class='col-lg-4'>";
		output = output + "<button id='3_27' name='3_27' ";
		output = output + this.obtenerClaseEstado(mesaArray[27].getEstado());
		output = output + "type='button' onclick='selecMesa(3,27);' value='27'>27</button>";
		
		output = output + "<button id='3_28' name='3_28' ";
		output = output + this.obtenerClaseEstado(mesaArray[28].getEstado());
		output = output + "type='button' onclick='selecMesa(3,28);' value='28'>28</button>";
		
		output = output + "<button id='3_29' name='3_29' ";
		output = output + this.obtenerClaseEstado(mesaArray[29].getEstado());
		output = output + "type='button' onclick='selecMesa(3,29);' value='29'>29</button>";
		
		output = output + "<button id='3_30' name='3_30' ";
		output = output + this.obtenerClaseEstado(mesaArray[30].getEstado());
		output = output + "type='button' onclick='selecMesa(3,30);' value='30'>30</button>";
		output = output + "</div>";
		
		output = output + "</div><br />" +
				"<div class='row'>";
		
		output = output + "<div id='sector_1_2' class='col-lg-4'>";
		output = output + "<button id='1_5' name='1_5' ";
		output = output + this.obtenerClaseEstado(mesaArray[5].getEstado());
		output = output + "type='button' onclick='selecMesa(1,5);' value='5'>05</button>";
		
		output = output + "<button id='1_6' name='1_6' ";
		output = output + this.obtenerClaseEstado(mesaArray[6].getEstado());
		output = output + "type='button' onclick='selecMesa(1,6);' value='6'>06</button>";
 
		output = output + "<button id='1_7' name='1_7' ";
		output = output + this.obtenerClaseEstado(mesaArray[7].getEstado());
		output = output + "type='button' onclick='selecMesa(1,7);' value='7'>07</button>";

		output = output + "<button id='1_8' name='1_8' ";
		output = output + this.obtenerClaseEstado(mesaArray[8].getEstado());
		output = output + "type='button' onclick='selecMesa(1,8);' value='8'>08</button>";
		output = output + "</div>";
		
		output = output + "<div id='sector_2_2' class='col-lg-4'>";
		output = output + "<button id='2_21' name='2_21' ";
		output = output + this.obtenerClaseEstado(mesaArray[21].getEstado());
		output = output + "type='button' onclick='selecMesa(2,21);' value='21'>21</button>";
		
		output = output + "<button id='2_22' name='2_22' ";
		output = output + this.obtenerClaseEstado(mesaArray[22].getEstado());
		output = output + "type='button' onclick='selecMesa(2,22);' value='22'>22</button>";
		output = output + "</div>";
		
		output = output + "</div><br />" +
				"<div class='row'>";
		
		output = output + "<div id='sector_1_3' class='col-lg-4'>";
		output = output + "<button id='1_9' name='1_9' ";
		output = output + this.obtenerClaseEstado(mesaArray[9].getEstado());
		output = output + "type='button' onclick='selecMesa(1,9);' value='9'>09</button>";
		output = output + "<button id='1_10' name='1_10' ";
		output = output + this.obtenerClaseEstado(mesaArray[10].getEstado());
		output = output + "type='button' onclick='selecMesa(1,10);' value='10'>10</button>";
		output = output + "</div>";
		
		output = output + "<div id='sector_2_3' class='col-lg-4'>";
		output = output + "<button id='2_23' name='2_23' ";
		output = output + this.obtenerClaseEstado(mesaArray[23].getEstado());
		output = output + "type='button' onclick='selecMesa(2,23);' value='23'>23</button>";
		
		output = output + "<button id='2_24' name='2_24' ";
		output = output + this.obtenerClaseEstado(mesaArray[24].getEstado());
		output = output + "type='button' onclick='selecMesa(2,24);' value='24'>24</button>";
		output = output + "</div>";
		
		output = output + "</div><br />" +
				"<div class='row'>";
		
		output = output + "<div id='sector_1_4' class='col-lg-4'>";
		output = output + "<button id='1_11' name='1_11' ";
		output = output + this.obtenerClaseEstado(mesaArray[11].getEstado());
		output = output + "type='button' onclick='selecMesa(1,11);' value='11'>11</button>";
		output = output + "<button id='1_12' name='1_12' ";
		output = output + this.obtenerClaseEstado(mesaArray[12].getEstado());
		output = output + "type='button' onclick='selecMesa(1,12);' value='12'>12</button>";
		output = output + "</div>";
		
		output = output + "<div id='sector_2_4' class='col-lg-4'>";
		output = output + "<button id='2_25' name='2_25' ";
		output = output + this.obtenerClaseEstado(mesaArray[25].getEstado());
		output = output + "type='button' onclick='selecMesa(2,25);' value='25'>25</button>";
		
		output = output + "<button id='2_26' name='2_26' ";
		output = output + this.obtenerClaseEstado(mesaArray[26].getEstado());
		output = output + "type='button' onclick='selecMesa(2,26);' value='26'>26</button>";
		output = output + "</div>";
		
		output = output + "</div><br />" +
				"<div class='row'>";
		
		output = output + "<div id='sector_1_5' class='col-lg-4'>";
		output = output + "<button id='1_13' name='1_13' ";
		output = output + this.obtenerClaseEstado(mesaArray[13].getEstado());
		output = output + "type='button' onclick='selecMesa(1,13);' value='13'>13</button>";
		output = output + "<button id='1_13' name='1_13' ";
		output = output + this.obtenerClaseEstado(mesaArray[14].getEstado());
		output = output + "type='button' onclick='selecMesa(1,14);' value='14'>14</button>";
		output = output + "</div>";
		
		output = output + "</div><br />" +
				"<div class='row'>";
		
		output = output + "<div id='sector_1_6' class='col-lg-4'>";
		output = output + "<button id='1_15' name='1_15' ";
		output = output + this.obtenerClaseEstado(mesaArray[15].getEstado());
		output = output + "type='button' onclick='selecMesa(1,15);' value='15'>15</button>";
		output = output + "<button id='1_16' name='1_16' ";
		output = output + this.obtenerClaseEstado(mesaArray[16].getEstado());
		output = output + "type='button' onclick='selecMesa(1,16);' value='16'>16</button>";
		output = output + "</div>";
		
		output = output + "</div><br />" +
				"<div class='row'>";
		
		output = output + "<div id='sector_1_7' class='col-lg-4'>";
		output = output + "<button id='1_17' name='1_17' ";
		output = output + this.obtenerClaseEstado(mesaArray[17].getEstado());
		output = output + "type='button' onclick='selecMesa(1,17);' value='17'>17</button>";
		output = output + "<button id='1_18' name='1_18' ";
		output = output + this.obtenerClaseEstado(mesaArray[18].getEstado());
		output = output + "type='button' onclick='selecMesa(1,18);' value='18'>18</button>";
		output = output + "</div>";
		
		output = output + "<div class='col-lg-4'></div>";
		
		output = output + "<div id='sector_4_7' class='col-lg-4'>";
		output = output + "<button id='4_31' name='4_31' ";
		output = output + this.obtenerClaseEstado(mesaArray[31].getEstado());
		output = output + "type='button' onclick='selecMesa(4,31);' value='31'>31</button>";
		output = output + "<button id='4_32' name='4_32' ";
		output = output + this.obtenerClaseEstado(mesaArray[32].getEstado());
		output = output + "type='button' onclick='selecMesa(4,32);' value='32'>32</button>";
		output = output + "</div>";
		
		output = output + "</div><br />";
		output = output + "<div class='row'>"
				+ "<div class='col-lg-4'>"
				+ "</div>"
				+ "<div class='col-lg-4'>"
				+ "</div>";
		
		
		output = output +"<div class='row'>"
				 + "<div class='col-lg-4'>"					
				 + "</div>"
				 + "<div class='col-lg-4'></div>";
		
		output = output + "<div id='sector_4_8' class='col-lg-4'>";
		output = output + "<button id='4_33' name='4_33' ";
		output = output + this.obtenerClaseEstado(mesaArray[33].getEstado());
		output = output + "type='button' onclick='selecMesa(4,33);' value='33'>33</button>";
		output = output + "<button id='4_34' name='4_34' ";
		output = output + this.obtenerClaseEstado(mesaArray[34].getEstado());
		output = output + "type='button' onclick='selecMesa(4,34);' value='34'>34</button>";
		output = output + "</div>";
		output = output + "</div><br /></div>";
			
		return output;
	}
	/**
	 * 
	 * @param suc
	 * @return
	 */
	public List<MesaBean> buscarMesas(SucursalBean suc)
	{
		//Integer inicioMesa = 1;
		//Integer finMesa = (inicioMesa - 1) + 34;
		
		//switch( suc.getId()){
		//	case 2:
		//		inicioMesa = 50;
		//    break;
		//}
		
		List<MesaBean> mesasSalon = new ArrayList<MesaBean>();
    	SalonBean salon = suc.getSalon();
    	List<SectorBean> sectores = salon.getSectores(); 
    	
    	for (SectorBean sectorBean : sectores) {
    		List<MesaBean> mesas = sectorBean.getMesas();
			for (MesaBean mesa : mesas) {
				mesasSalon.add(mesa);
			}
    	}
    	return mesasSalon;
	}
	/**
	 * 
	 * @param idAperturaMesa
	 * @param suc
	 * @return
	 */
	public AperturaMesaBean buscarAperturaMesa(Integer idAperturaMesa, SucursalBean suc)
	{
		List<AperturaMesaBean> apMesas = suc.getAperturaMesa();
		AperturaMesaBean apMesa = new AperturaMesaBean();
		for (AperturaMesaBean aperturaMesa : apMesas) {
			if(aperturaMesa.getIdAperturaMesa().equals(idAperturaMesa)) {
				apMesa = aperturaMesa; //ver si pasar asi o pasarle todo
			}
		}
		return apMesa;
	}
	/**
	 * 
	 * @param idAperturaMesa
	 * @param suc
	 * @return
	 */
	public List<PedidoBean> buscarPedidosPorAperturaMesa(Integer idAperturaMesa, SucursalBean suc)
	{
		AperturaMesaBean apMesa = this.buscarAperturaMesa(idAperturaMesa, suc);
		List<PedidoBean> pedidos = apMesa.getPedidos();
		//List<ItemCartaBean> itemsPedidos = new ArrayList<ItemCartaBean>();
		
		return pedidos;
	}
	/**
	 * 
	 * @param apMesa
	 * @param suc
	 * @return
	 */
	public String generarTablaPedidosApMesa(List<PedidoBean> pedidos)
	{
		//ver si conviene hacer una tabla por area... 
		String output = "<table class='table table-striped table-bordered table-hover' id='tablaItemsPedidos'>" +
						"<thead><tr><th>#</th><th>Descripci&oacute;n</th><th>Acciones</th></tr></thead>" +
					    "<tbody>";
						
		for (PedidoBean pedido : pedidos) {

			String estadoPedido = pedido.getEstado();
			Integer idPedido = pedido.getId();
				
			output = output + "<tr ";
			if("TERMINADO".equals(estadoPedido)){
				output = output + " class='success'";
			}
			else if("AREALIZAR".equals(estadoPedido)) {
				output = output + " class='warning'";
			}
			output = output +" id='pedido_"+idPedido +"'><td>"+idPedido+"</td>"+
			        "<td> PEDIDO "+idPedido+" </td><td>";
				
			if("AREALIZAR".equals(estadoPedido)) { 
				output = output + "<input type='checkbox' id='selectedItem_"+ idPedido +
						"' name='pedidosSeleccionados[]' value='"+idPedido+"'>";
			}
			output = output + "</td></tr>";
									
		}			    
		
		output = output + "</tbody></table>";
		
		return output;
	}
	
	/**
	 * 
	 * @param pedidos
	 * @return
	 */
	public String generarTablaCierrePedidosApMesa(List<PedidoBean> pedidos)
	{
		//ver si conviene hacer una tabla por area... 
		String output = "<table class='table table-striped table-bordered table-hover' id='tablaPedidos'>" +
						"<thead><tr><th>#</th><th>Descripci&oacute;n</th><th>Precio Unitario</th></tr></thead>" +
						"<tbody>";
			
		for (PedidoBean pedido : pedidos) {
			for (ItemCartaBean item : pedido.getItems()) {
				output = output + "<tr class='success' id='itemPedidoRow_"+item.getId()+"'>" +
						"<td>"+ item.getId() +"</td>"+
						"<td>"+item.getPlato().getDescripcion()+"</td>"+
						"<td> $ "+item.getPrecio()+".-"+
						"</td></tr>";
			}	
		}
		output = output + "</tbody></table>";
		return output;
	}
	/**
	 * 
	 * @param aMesa
	 * @param listaPedidos
	 * @return
	 */
	public List<PedidoBean> buscarPedidos( AperturaMesaBean aMesa, String[] listaPedidos)
	{
		List<PedidoBean> pedidos = new ArrayList<PedidoBean>();
		List<PedidoBean> pedidosApMesa = aMesa.getPedidos();
		
		for( Integer i = 0; i < listaPedidos.length; i++) {
			for (PedidoBean pedidoApMesa : pedidosApMesa) {
				if(pedidoApMesa.getId().equals(Integer.parseInt(listaPedidos[i]))) {
					pedidos.add(pedidoApMesa);
				}
			}
		}
		
		return pedidos;
	}
	/**
	 * 
	 * @param pedidos
	 * @return
	 */
	public Float calcularTotalPedidos (List<PedidoBean> pedidos)
	{
		Float total = (float) 0;
		
		for (PedidoBean pedido : pedidos) {
			List<ItemCartaBean> itemsPedido = pedido.getItems();
			for (ItemCartaBean itemPedido : itemsPedido) {
				total = total + itemPedido.getPrecio();
			}
		}
		return total;
	}
	/**
	 * 
	 * @param suc
	 * @param items
	 * @return
	 */
	public List<ItemCartaBean> buscarItemsCarta(SucursalBean suc, String[] items )
	{
		List<ItemCartaBean> itemsCarta = new ArrayList<ItemCartaBean>();
		List<ItemCartaBean> itemsCartaSuc = suc.getCarta().getItems();
		
	   	for (Integer i = 0 ; i < items.length; i++){ 
	   		 for (ItemCartaBean itemCartaSuc : itemsCartaSuc) {
				if(itemCartaSuc.getId().equals(Integer.parseInt(items[i]))){
					itemsCarta.add(itemCartaSuc);
				}
			} 
	   	}
	   	
		return itemsCarta;
	}
	
	public List<AperturaMesaBean> buscarAperturasMesas(Integer idsuc) throws RemoteException
	{
		List<AperturaMesaBean> apMesas = new ArrayList<AperturaMesaBean>();
		List<AperturaMesaBean> listaApMesa = BdelegateWeb.getInstancia().obtenerDatosSucursal(idsuc).getAperturaMesa();
			//suc.getAperturaMesa();
	
		for (AperturaMesaBean aperturaMesa : listaApMesa)
		{
				apMesas.add(aperturaMesa);		
		}
		
		return apMesas;
	}
}
 